#include "aky_com_include.h"


extern char code graphic1[];

void st7567_init(void)
{
    RD_PROT_REG |= RD_PIN; // IO端口方向
    RD_UP_REG &= ~RD_PIN;  // 上拉配置
    WR_PROT_REG |= WR_PIN; // IO端口方向
    WR_UP_REG &= ~WR_PIN;  // 上拉配置

    SCL_PROT_REG |= SCL_PIN; // IO端口方向
    SCL_UP_REG &= ~SCL_PIN;  // 上拉配置

    SDA_PROT_REG |= SDA_PIN; // IO端口方向
    SDA_UP_REG &= ~SDA_PIN;  // 上拉配置

    RS_PROT_REG |= RS_PIN; // IO端口方向
    RS_UP_REG &= ~RS_PIN;  // 上拉配置

    CS_PROT_REG |= CS_PIN; // IO端口方向
    CS_UP_REG &= ~CS_PIN;  // 上拉配置

    RESET_PROT_REG |= RESET_PIN; // IO端口方向
    RESET_UP_REG &= ~RESET_PIN;  // 上拉配置

    LCD_POWER_PROT_REG |= LCD_POWER_PIN; // IO端口方向
    LCD_POWER_UP_REG &= ~LCD_POWER_PIN;  // 上拉配置

    LCD_BL_PROT_REG |= LCD_BL_PIN; // IO端口方向
    LCD_BL_UP_REG &= ~LCD_BL_PIN;  // 上拉配置

    P4M |= 0XFF;
    P4UR &= ~0XFF;

    P4 = 0XFF;
    WR_H;
    RD_H;
    SCL_H;
    SDA_H;
    RS_H;
    CS_H;
    RESET_H;
    LCD_POWER_ON;
    LCD_BL_OFF;
}
//=============delay time=====================
//=============transfer command to LCM===============
void transfer_command(int data1)
{
    CS_L;
    RS_L;
    RD_L;
    WR_L;
    P4 = data1;
    RD_H;
    CS_H;
    RD_L;
}
//-----------transfer data to LCM---------------
void transfer_data(int data1)
{
    CS_L;
    RS_H;
    RD_L;
    WR_L;
    P4 = data1;
    RD_H;
    CS_H;
    RD_L;
}

//============initial
void initial_lcd(void)
{
    st7567_init();
    RESET_L; /*低电平复位*/
    aky_tick_delay_ms(20);
    RESET_H; /*复位完毕*/
    aky_tick_delay_ms(20);

    transfer_command(0xe2); /*软复位*/
    aky_tick_delay_ms(10);
    transfer_command(0x2c); /*升压步聚 1*/
    aky_tick_delay_ms(10);
    transfer_command(0x2e); /*升压步聚 2*/
    aky_tick_delay_ms(10);
    transfer_command(0x2f); /*升压步聚 3*/
    aky_tick_delay_ms(10);
    transfer_command(0x24); /*粗调对比度，可设置范围 0x20～0x27*/

    transfer_command(0x81); /*微调对比度*/
    transfer_command(26); /*微调对比度的值，可设置范围 0x00～0x3f*/

    transfer_command(0xa2); /*1/9 偏压比（bias）*/
    transfer_command(0xc8); /*行扫描顺序：从上到下*/
    transfer_command(0xa0); /*列扫描顺序：从左到右*/
    transfer_command(0x60); /*起始行：第一行开始*/
    transfer_command(0xaf); /*开显示*/
}
void clear_screen()
{
    uint8_t i, j;
    for (i = 0; i < 8; i++)
    {
        CS_L;
        transfer_command(0xb0 + i);
        transfer_command(0x10);
        transfer_command(0x00);
        for (j = 0; j < 132; j++)
        {
            transfer_data(0x00);
        }
    }
}
//==================display a piture of 128*64 dots================
void disp_grap(char *dp)
{
    int i, j;
    for (i = 0; i < 8; i++)
    {
        CS_L;
        transfer_command(0xb0 + i); // set page address,
        transfer_command(0x10);
        transfer_command(0x00 + 1);
        for (j = 0; j < 128; j++)
        {
            transfer_data(*dp);
            dp++;
        }
    }
}



